module key_test(     //按键控制模块
//端口信号：模块的输入输出接口
  input       		clk,       //50MHZ
  input       		rst_n,	   //低电平复位
  input  [3:0]		key,       //四个按键组合信号
  
  output [10:0]    wr_data,    //输出一帧数据，为DA模块的输入数字量
  output [19:0]    out_data    //输出数码管显示数据
 );
 
	//计数器时钟分频 
	reg [30:0] cnt;
	reg        clk_r;  //分频时钟：在消除抖动的时钟频率下进行按键的检测
	always@(posedge clk or negedge rst_n) //按键消抖，时间为0.2s进行一次检测
		if(!rst_n)
			begin
				cnt <= 0;
				clk_r <= 0;
			end
	 else if(cnt < 30'd1000_0000)
				cnt <= cnt + 1'b1;
	  else
			 begin 
				cnt <= 0;
				clk_r <= ~clk_r;
			 end
			 
	//按键为低电平有效，当检测到对应按键之后，相应数值加1，并显示相应的通道
	reg [7:0]  data;     //按键输入数据
	reg [1:0]  channel;  //通道选择
	reg [7:0]  key1,key2,key3,key4; //相应四个按键
	always@(posedge clk_r or negedge rst_n )
	 if(!rst_n)     
		  begin
			key1 <= 8'h00;
			key2 <= 8'h00;
			key3 <= 8'h00;
			key4 <= 8'h00;
			data <= 8'h00;
			channel <= 2'b00;
		  end
	 else
	  case(key) 
		 4'b1110 : begin      //按键1：选择通道A，且输入数字量加1
					channel <= 2'b00;
						key1 <= key1 + 1'b1;
						data <= key1;
					  end
		 4'b1101 : begin     //按键2：选择通道B，且输入数字量加1
						channel <= 2'b01;
						key2 <= key2 + 1'b1;
						data <= key2;
					  end
		 4'b1011 : begin    //按键3：选择通道C，且输入数字量加1
						channel <= 2'b10;
						key3 <= key3 + 1'b1;
						data <= key3;
					  end
		 4'b0111 : begin   //按键4：选择通道D，且输入数字量加1
						channel <= 2'b11;
						key4 <= key4 + 1'b1;
						data <= key4;
					  end
		 default :;
		endcase
		
	//用赋值语句将需要的数据组合起来，在此例中将RNG默认为1
	assign wr_data = {channel,1'b1,data};
	assign out_data = {{3'b000,channel[1]},3'b000,channel[0],4'h1,data};

	endmodule 